package com.rui.shangXueTang.maze;

/**
 * @author : [锐神NO.3]
 * @version : [v1.0]
 * @className : MazeApp
 * @createTime : [2022/2/14 20:29]
 * @description : [迷宫问题——递归]
 */

@SuppressWarnings("all")
public class MazeApp {
    public static void main(String[] args) {

        int[][] map = new int[8][7];

        // 初始化地图 设置第一行和最后一行为墙，设置为1
        for(int i = 0; i < map[0].length; i++) {
            map[0][i] = 1;
            map[map.length - 1][i] = 1;
        }

        //设置第一列和第七列为墙
        for(int i = 0; i < map.length; i++) {
            map[i][0] = 1;
            map[i][map[0].length - 1] = 1;
        }

        //设置障碍墙
        map[3][1] = 1;
        map[3][2] = 1;

        //查看当前地图
        System.out.println("当前地图:");
        for (int[] ints : map) {
            for (int j = 0; j < map[0].length; j++) {
                System.out.print(ints[j] + "\t");
            }
            System.out.println("");
        }

        //查看小球所走路线，从起点(1,1)开始
        isRun(map, 1, 1);
        System.out.println("小球走过的路线:");
        for (int[] ints : map) {
            for (int j = 0; j < map[0].length; j++) {
                System.out.print(ints[j] + "\t");
            }
            System.out.println("");
        }
    }

    //判断四周的路是否能走
    public static boolean isRun(int[][] map, int i, int j) {
        if(map[6][5] == 2){
            return true;
        }else {
            if(map[i][j] == 0) {
                map[i][j] = 2;

                //下右上左 选择走的方向
                if(isRun(map, i + 1, j)) {
                    return true;
                }else if(isRun(map, i, j + 1)) {
                    return true;
                }else if(isRun(map, i - 1, j)) {
                    return true;
                }else if(isRun(map, i, j - 1)) {
                    return true;
                }else {
                    map[i][j] = 3;
                    return false;
                }
            }else {
                return false;
            }
        }
    }
}
